#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''
@Project ：V2 
@File    ：T.py
@IDE     ：PyCharm 
@Author  ：郭星
@Date    ：2025/8/21 14:32 
'''
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 1. 构造数据
data = {
    '功率': [1400, 1600, 1400, 1600, 1400, 1600, 1400, 1600],
    '频率': [180, 180, 230, 230, 180, 180, 230, 230],
    '速度': [50, 50, 50, 50, 90, 90, 90, 90],
    '响应变量': [0.785, 1.171, 0.561, 0.717, 0.73, 0.79, 0.6, 0.683]
}
df = pd.DataFrame(data)

# 2. 计算各因子水准的响应变量均值（用于分析主效应）
power_mean = df.groupby('功率')['响应变量'].mean()
freq_mean = df.groupby('频率')['响应变量'].mean()
speed_mean = df.groupby('速度')['响应变量'].mean()

print("功率不同水准的响应均值：")
print(power_mean)
print("\n频率不同水准的响应均值：")
print(freq_mean)
print("\n速度不同水准的响应均值：")
print(speed_mean)

# 3. 可视化：热力图（展示三因子组合与响应变量的关系）
# 先构造“因子组合-响应”的透视表
pivot_df = df.pivot_table(
    index=['功率', '频率'],  # 行：功率、频率
    columns='速度',          # 列：速度
    values='响应变量'        # 数值：响应变量
)

plt.figure(figsize=(10, 6))
sns.heatmap(pivot_df, annot=True, cmap='YlGnBu', fmt='.3f')
plt.title('三因子（功率、频率、速度）组合与响应变量的关系')
plt.xlabel('速度')
plt.ylabel('功率-频率')
plt.show()

# 4. 可视化：柱状图（展示单因子主效应）
plt.figure(figsize=(15, 5))

# 子图1：功率的主效应
plt.subplot(1, 3, 1)
power_mean.plot(kind='bar', color='skyblue')
plt.title('功率对响应变量的影响')
plt.xlabel('功率')
plt.ylabel('平均响应变量')
plt.xticks(rotation=0)

# 子图2：频率的主效应
plt.subplot(1, 3, 2)
freq_mean.plot(kind='bar', color='lightgreen')
plt.title('频率对响应变量的影响')
plt.xlabel('频率')
plt.ylabel('平均响应变量')
plt.xticks(rotation=0)

# 子图3：速度的主效应
plt.subplot(1, 3, 3)
speed_mean.plot(kind='bar', color='salmon')
plt.title('速度对响应变量的影响')
plt.xlabel('速度')
plt.ylabel('平均响应变量')
plt.xticks(rotation=0)

plt.tight_layout()
plt.show()